package com.campusbackend.service;

import com.campusbackend.entity.vo.PendingAuditUserVO;
import com.campusbackend.entity.vo.UserAuditRequestVO;
import com.campusbackend.entity.vo.UserStatisticsVO;
import com.campusbackend.entity.vo.UserManagementVO;
import com.campusbackend.entity.vo.UserSearchRequestVO;
import com.campusbackend.entity.vo.UserDetailVO;
import com.campusbackend.entity.vo.UserUpdateRequestVO;
import com.campusbackend.entity.vo.DailyUserStatisticsVO;

import java.util.List;

/**
 * 用户审核服务接口
 * 
 * @author yezi
 * @since 2025-07-27
 */
public interface UserAuditService {

    /**
     * 获取待审核用户列表
     * @return 待审核用户列表
     */
    List<PendingAuditUserVO> getPendingAuditUsers();

    /**
     * 审核用户
     * @param auditRequest 审核请求
     * @return 审核结果消息
     */
    String auditUser(UserAuditRequestVO auditRequest);

    /**
     * 获取用户统计信息
     * @return 用户统计信息
     */
    UserStatisticsVO getUserStatistics();

    /**
     * 获取所有教师（用于教师库管理）
     * @return 教师列表
     */
    List<UserManagementVO> getAllTeachers();

    /**
     * 获取所有学生（用于学生库管理）
     * @return 学生列表
     */
    List<UserManagementVO> getAllStudents();

    /**
     * 注销用户（禁用账号）
     * @param userId 用户ID
     * @param userType 用户类型：1-教师，2-学生
     * @return 注销结果消息
     */
    String deactivateUser(Long userId, Integer userType);

    /**
     * 启用用户
     * @param userId 用户ID
     * @param userType 用户类型：1-教师，2-学生
     * @return 启用结果消息
     */
    String activateUser(Long userId, Integer userType);

    /**
     * 获取被驳回用户列表
     * @return 被驳回用户列表
     */
    List<PendingAuditUserVO> getRejectedUsers();

    /**
     * 获取被注销用户列表
     * @return 被注销用户列表
     */
    List<UserManagementVO> getDeactivatedUsers();

    /* ========== 数据导出方法 ========== */

    /**
     * 获取待审核用户数据（用于导出）
     * @return 待审核用户列表
     */
    List<PendingAuditUserVO> getPendingAuditUsersForExport();

    /**
     * 获取被驳回用户数据（用于导出）
     * @return 被驳回用户列表
     */
    List<PendingAuditUserVO> getRejectedUsersForExport();

    /**
     * 获取被注销用户数据（用于导出）
     * @return 被注销用户列表
     */
    List<UserManagementVO> getDeactivatedUsersForExport();

    /**
     * 获取全部用户数据（用于导出）
     * @return 全部用户列表
     */
    List<UserManagementVO> getAllUsersForExport();

    /**
     * 搜索用户
     * @param searchRequest 搜索请求
     * @return 用户列表
     */
    List<UserManagementVO> searchUsers(UserSearchRequestVO searchRequest);

    /**
     * 根据登录ID获取用户详情
     * @param loginId 登录ID（工号或学号）
     * @param userType 用户类型：1-教师，2-学生
     * @return 用户详情
     */
    UserDetailVO getUserDetail(String loginId, Integer userType);

    /**
     * 更新用户信息
     * @param updateRequest 更新请求
     * @return 更新结果消息
     */
    String updateUser(UserUpdateRequestVO updateRequest);

    /**
     * 获取每日用户统计数据
     * @param days 统计天数（默认7天）
     * @return 每日用户统计列表
     */
    List<DailyUserStatisticsVO> getDailyUserStatistics(int days);
}
